package controlador;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import modelo.bd.excepcion.DAOException;
import modelo.dominio.Busqueda;
import modelo.servicio.Busquedas;
import modelo.servicio.Portable;

public class IndexControlador extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=ISO-8859-1");
        PrintWriter out = response.getWriter();
        String accion = request.getParameter("ac") == null ? "" : request.getParameter("ac");
        request.setAttribute("ac", accion);

        if (accion.equals("ls")) {
        } else if (accion.equals("hom")) {
            getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
        } else if (accion.equals("conf")) {
            getServletContext().getRequestDispatcher("/jsp/indice/configurar.jsp").forward(request, response);
        } else if (accion.equals("po")) {
            String ip = request.getRemoteHost();
            Integer area = Integer.parseInt(request.getSession().getAttribute("sArea").toString());
            String directorioDestino = request.getParameter("txt_destino");
            boolean exito = Portable.instancia().actualizar(ip, directorioDestino, area);
            if(exito){
                out.println("<br/><br/> La exportaci&oacute;n ha sido realizada de manera exitosa. <br/>"
                        + "Sistema portable almacenado en: " + directorioDestino + "\\SSYMA\\"
                        + "<br/><br/>"
                        + "Para hacer uso de &eacute;l, copiar el archivo ejecutable en la direcci&oacute;n"
                        + " arriba mencionada.");
            }
            else{
                out.println("<br/><br/> Se detect&oacute; un error al realizar la"
                        + " exportaci&oacute;n al directorio destino: " + directorioDestino);
            }
        }        else if (accion.equals("bus")) {
            try {
                Integer area = Integer.parseInt(request.getSession().getAttribute("sArea").toString());
                String criterio = request.getParameter("criterio") == null ? "" : request.getParameter("criterio");
                List<Busqueda> busc = Busquedas.instancia().buscar(criterio, area);
                if (!busc.isEmpty()) {
                    out.println("Resultados <ul id='busqueda'>");
                    int cont = 0;
                    boolean res = true;
                    for (Busqueda bus : busc) {
                        if (!bus.getCoincidente() && res) {
                            if (cont == 0) {
                                out.println("No hay resultados");
                            }
                            out.println("</ul>");
                            out.println("Sugerencias <ul id='sugerencias'>");
                            res = false;
                        }
                        cont++;
                        if (bus.getTipo().equalsIgnoreCase("ACT")) {
                            out.println("<li>Actividad: "
                                    + "<a href='javascript:void(0)' onclick=\"charge('#centro', 'acti?ac=de&id=" + bus.getVinculo() + "')\">"
                                    + bus.getDescripcion()
                                    + "</a></li>");
                        } else if (bus.getTipo().equalsIgnoreCase("CND")) {
                            out.println("<li>Condicionante: "
                                    + "<a href='javascript:void(0)' onclick=\"charge('#centro', 'condi?ac=de&id=" + bus.getVinculo() + "')\">"
                                    + bus.getDescripcion()
                                    + "</a></li>");
                        } else {
                            out.println("<li>Documento: <a href='docu?ac=dl&src=" + bus.getVinculo() + "'>"
                                    + bus.getDescripcion()
                                    + "</a></li>");
                        }
                    }
                    out.println("</ul><br/><br/>");
                } else {
                    out.println("El criterio <strong>" + criterio + "</strong> no obtuvo resultados.");
                }
            } catch (DAOException ex) {
                out.println("Error: " + ex.getMessage());
            }
        }
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }
}
